package agencia;

import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import agencia.exceptions.DuplicadoException;
import agencia.exceptions.InexistenteException;
import agencia.exceptions.ServicioDuplicadoException;

public class ExcursionMedioDia implements Excursion {

	private int						categoria;
	private Date					fecha;
	private List<Servicio> 			listaServicios;
	private String 					nombre;
	private float					precioServicios  = 0;
	private float					precioExcursion = 0;
	private Lugar					lugar;
	private float					precioBasico = 0;
	
	public ExcursionMedioDia(String nombre, Date fecha, int categoria){
		listaServicios = new LinkedList<Servicio>();
		this.setCategoria(categoria);
		this.setFecha(fecha);
		this.setNombre(nombre);			
	}
			
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public int getCategoria() {
		return categoria;
	}
	public void setCategoria(int categoria) {
		this.categoria = categoria;
	}
	public Date getFecha() {
		return fecha;
	}
	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}
	
	public void agregarServicio(Servicio servicio) throws DuplicadoException
	{
		if (this.listaServicios.contains(servicio) == true){
			throw new ServicioDuplicadoException();
		}
		else {
			this.listaServicios.add(servicio);
			this.setPrecioServicios(this.getPrecioServicios() + servicio.getPrecio());
		}
	}
	
	public void quitarServicio(Servicio servicio) throws InexistenteException {
		
		if	((this.listaServicios.remove(servicio)) != true){
			throw new InexistenteException("Servicio Inexistente", servicio.toString());
		}
		else {
			this.setPrecioServicios(this.getPrecioServicios() - servicio.getPrecio());
		}	
	}
	
	public List<Servicio> getServicios()
	{
		return this.listaServicios;
	}

	public float getPrecioServicios() {
		return precioServicios;
	}

	private void setPrecioServicios(float precioServicios) {
		this.precioServicios = precioServicios;
	}
	
	public float getPrecioExcursion(){
		return this.precioExcursion;
	}
	
	private void setPrecioExcursion(float precio){
		this.precioExcursion = precio;
	}

	public Lugar getLugar() {
		return lugar;
	}

	public void setLugar(Lugar lugar) {
		this.lugar = lugar;
	}
	
	public void setPrecioBasicoExcursion(float precio) {
		this.precioBasico = precio;
		setPrecioExcursion(precio + this.getPrecioServicios());
	}
	
	public float getPrecioBasicoExcursion() {
		return this.precioBasico;		
	}

}
